package br.com.vagacerta.controller;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.text.MaskFormatter;
import javax.swing.JButton;

import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.JLabel;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

import javax.swing.JFormattedTextField;
import javax.swing.ImageIcon;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

import java.awt.Toolkit;
import java.awt.Color;

@SuppressWarnings("serial")
public class CancelaController extends JFrame implements ActionListener {

	// DECLARA��O DOS COMPONENTES UTILIZADOS

	private JPanel contentPane;
	private JButton bt1;
	private JButton bt2;
	private JButton bt3;
	private JButton bt4;
	private JButton bt5;
	private JButton bt6;
	private JButton bt7;
	private JButton bt8;
	private JButton bt9;
	private JButton btCorrige;
	private JButton btasterisco;
	private JButton bt0;
	private JButton btAvulso;
	private JButton btMensalista;
	private JButton btOk;
	private JLabel lbmsg;
	private JLabel lbData;
	private JLabel lblTipo;
	private JLabel lbldata;
	private Date agora;
/*	private Socket socket;*/
	// JEditorPane editorPane;

	PrintWriter stringEnvio;
	// private MaskFormatter mascara;
	private JTextField tfDisplay;
	private JLabel lbLogo;
	private JLabel lblBemvindo;
	private ImageIcon imagem;

	// CONSTRUTOR CANCELACONTROLLER

	public CancelaController() throws ParseException {
		setIconImage(Toolkit.getDefaultToolkit().getImage(
				getClass().getResource("fotos/Logo1.jpg")));

		setResizable(false);
		setTitle("VAGA CERTA");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 399, 651);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		setLocationRelativeTo(null);

		bt1 = new JButton("1");
		bt1.setEnabled(false);
		bt1.addActionListener(this);
		bt1.setBounds(97, 335, 57, 37);
		contentPane.add(bt1);

		bt2 = new JButton("2");
		bt2.setEnabled(false);
		bt2.addActionListener(this);
		bt2.setBounds(170, 335, 57, 37);
		contentPane.add(bt2);

		bt3 = new JButton("3");
		bt3.setEnabled(false);
		bt3.addActionListener(this);
		bt3.setBounds(237, 335, 57, 37);
		contentPane.add(bt3);

		bt4 = new JButton("4");
		bt4.setEnabled(false);
		bt4.addActionListener(this);
		bt4.setBounds(97, 383, 57, 37);
		contentPane.add(bt4);

		bt5 = new JButton("5");
		bt5.setEnabled(false);
		bt5.addActionListener(this);
		bt5.setBounds(170, 383, 57, 37);
		contentPane.add(bt5);

		bt6 = new JButton("6");
		bt6.setEnabled(false);
		bt6.addActionListener(this);
		bt6.setBounds(237, 383, 57, 37);
		contentPane.add(bt6);

		bt7 = new JButton("7");
		bt7.setEnabled(false);
		bt7.addActionListener(this);
		bt7.setBounds(97, 431, 57, 37);
		contentPane.add(bt7);

		bt8 = new JButton("8");
		bt8.setEnabled(false);
		bt8.addActionListener(this);
		bt8.setBounds(170, 431, 57, 37);
		contentPane.add(bt8);

		bt9 = new JButton("9");
		bt9.setEnabled(false);
		bt9.addActionListener(this);
		bt9.setBounds(237, 431, 57, 37);
		contentPane.add(bt9);

		btCorrige = new JButton("Clear");
		btCorrige.setEnabled(false);
		btCorrige.setFont(new Font("Tahoma", Font.BOLD, 8));
		btCorrige.addActionListener(this);
		btCorrige.setBounds(237, 479, 57, 37);
		contentPane.add(btCorrige);

		btasterisco = new JButton("*");
		btasterisco.setEnabled(false);
		btasterisco.addActionListener(this);
		btasterisco.setFont(new Font("Tahoma", Font.PLAIN, 8));
		btasterisco.setBounds(97, 479, 57, 37);
		contentPane.add(btasterisco);

		bt0 = new JButton("0");
		bt0.setEnabled(false);
		bt0.addActionListener(this);
		bt0.setBounds(170, 479, 57, 37);
		contentPane.add(bt0);

		btAvulso = new JButton("Avulso");
		btAvulso.setFont(new Font("Trebuchet MS", Font.PLAIN, 14));
		btAvulso.setMnemonic('A');
		btAvulso.addActionListener(this);
		btAvulso.setBounds(71, 276, 108, 37);
		contentPane.add(btAvulso);

		btMensalista = new JButton("Mensalista");
		btMensalista.setFont(new Font("Trebuchet MS", Font.PLAIN, 14));
		btMensalista.setMnemonic('M');
		btMensalista.addActionListener(this);
		btMensalista.setBounds(210, 276, 108, 37);
		contentPane.add(btMensalista);

		btOk = new JButton("OK");
		btOk.setMnemonic('O');
		btOk.setEnabled(false);
		btOk.addActionListener(this);
		btOk.setBounds(97, 527, 197, 29);
		contentPane.add(btOk);

		lbmsg = new JLabel("");
		lbmsg.setFont(new Font("Trebuchet MS", Font.BOLD, 12));
		lbmsg.setBounds(97, 567, 264, 14);
		contentPane.add(lbmsg);

		lbData = new JLabel("");
		lbData.setFont(new Font("Trebuchet MS", Font.BOLD, 12));
		lbData.setBounds(97, 598, 264, 14);
		contentPane.add(lbData);

		lblTipo = new JLabel("Tipo:");
		lblTipo.setForeground(Color.BLACK);
		lblTipo.setFont(new Font("Trebuchet MS", Font.BOLD, 12));
		lblTipo.setHorizontalAlignment(SwingConstants.CENTER);
		lblTipo.setBounds(29, 567, 46, 14);
		contentPane.add(lblTipo);

		lbldata = new JLabel("Data:");
		lbldata.setForeground(Color.BLACK);
		lbldata.setFont(new Font("Trebuchet MS", Font.BOLD, 12));
		lbldata.setHorizontalAlignment(SwingConstants.CENTER);
		lbldata.setBounds(29, 592, 46, 20);
		contentPane.add(lbldata);

		getRootPane().setDefaultButton(btOk);

		JLabel lbMsgInicial = new JLabel(
				"\r\nPor favor, selecione uma op\u00E7\u00E3o abaixo.");
		lbMsgInicial.setForeground(Color.BLACK);
		lbMsgInicial.setHorizontalAlignment(SwingConstants.CENTER);
		lbMsgInicial.setFont(new Font("Trebuchet MS", Font.BOLD, 15));
		lbMsgInicial.setBounds(10, 153, 383, 14);
		contentPane.add(lbMsgInicial);

		tfDisplay = new JTextField();
		tfDisplay.setToolTipText("Digite o c\u00F3digo do seu cupom");
		tfDisplay.setFont(new Font("Trebuchet MS", Font.BOLD, 20));
		tfDisplay.setHorizontalAlignment(SwingConstants.CENTER);
		tfDisplay.setBounds(71, 185, 247, 57);
		contentPane.add(tfDisplay);
		tfDisplay.setColumns(10);
		tfDisplay.setEnabled(false);

		imagem = new ImageIcon(getClass().getResource("fotos/Logo.png"));

		lbLogo = new JLabel(imagem);
		lbLogo.setIcon(new ImageIcon("C:\\Users\\Alex\\Desktop\\Logo.png"));
		lbLogo.setHorizontalAlignment(SwingConstants.CENTER);
		lbLogo.setBounds(10, 11, 373, 109);
		contentPane.add(lbLogo);

		lblBemvindo = new JLabel("Bem-Vindo");
		lblBemvindo.setForeground(Color.BLACK);
		lblBemvindo.setFont(new Font("Trebuchet MS", Font.BOLD, 15));
		lblBemvindo.setHorizontalAlignment(SwingConstants.CENTER);
		lblBemvindo.setBounds(10, 122, 373, 20);
		contentPane.add(lblBemvindo);

		// mascara = new MaskFormatter("########");
		// mascara.setInvalidCharacters("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
		//
		// mascara.install(tfDisplay);

		// TRABALHAR COM COMPONENTE HTML

		// editorPane = new JEditorPane();
		// editorPane.setBounds(310, 147, 96, 58);
		// contentPane.add(editorPane);
		//
		// String aux = "<b>Negrito</b>";
		// editorPane.setContentType("text/html");
		// editorPane.setText(aux);

		/* configuraRede(); */

	}

	// M�TODO ACTIONPERFORMED QUE CONTROLA A A��O DOS COMPOENENTES DO SOFTWARE

	public void actionPerformed(ActionEvent ev) {

		String dados = null;

		// CONTROLE DA DATA E HORA

		agora = new Date();
		String formatoData = "dd/MM/yyyy HH:mm:ss";
		DateFormat dateFormat = new SimpleDateFormat(formatoData);

		Object source = ev.getSource();

		String teste = tfDisplay.getText();

		// COMPONENTE MENSALISTA

		if (source.equals(btMensalista)) {

			tfDisplay.setEnabled(true);
			habilitaTudo();
			tfDisplay.requestFocus();
			lbmsg.setText("2");
			btAvulso.setEnabled(false);

			// COMPONENTE AVULSO

		} else if (source.equals(btAvulso)) {
			desabilitaTeclado();
			lbmsg.setText("1");
			lbData.setText(dateFormat.format(agora));
			btMensalista.setEnabled(false);

			dados = lbmsg.getText() + ",, " + lbData.getText();

/*			stringEnvio.println(dados);
			stringEnvio.flush();
*/

			chamaHttpClient(dados);
			
			btMensalista.setEnabled(true);

			JOptionPane.showMessageDialog(null, "Status: LIBERADO");

			limpaDados();

			// COMPONENTES DO TECLADO

		} else if (source.equals(bt1)) {

			tfDisplay.setText(teste + "1");

		} else if (source.equals(bt2)) {

			tfDisplay.setText(teste + "2");

		} else if (source.equals(bt3)) {

			tfDisplay.setText(teste + "3");

		} else if (source.equals(bt4)) {

			tfDisplay.setText(teste + "4");

		} else if (source.equals(bt5)) {

			tfDisplay.setText(teste + "5");

		} else if (source.equals(bt6)) {

			tfDisplay.setText(teste + "6");

		} else if (source.equals(bt7)) {

			tfDisplay.setText(teste + "7");

		} else if (source.equals(bt8)) {

			tfDisplay.setText(teste + "8");

		} else if (source.equals(bt9)) {

			tfDisplay.setText(teste + "9");

		} else if (source.equals(bt0)) {

			tfDisplay.setText(teste + "0");

		} else if (source.equals(btOk)) {

			lbData.setText(teste);
			String capturaId = tfDisplay.getText();

			limpaDisplay();

			desabilitaTeclado();

			liberaBotoes();

			lbData.setText(dateFormat.format(agora));

			JOptionPane.showMessageDialog(null, "Status: LIBERADO");

			dados = lbmsg.getText() + ", " + capturaId + ", "
					+ lbData.getText();

			/*
			 * stringEnvio.println(dados); stringEnvio.flush();
			 */

			chamaHttpClient(dados);

			limpaDados();

			// COMPONENTE CORRIGE

		} else if (source.equals(btCorrige)) {

			limpaDisplay();

			// COMPONENTE ASTERISCO

		} else if (source.equals(btasterisco)) {

			tfDisplay.setText(teste + "*");

		}

	}

	/*
	 * // M�TODO DE CONFIGURAR A REDE PARA CONEX�O COM O SERVIDOR
	 * 
	 * private void configuraRede() {
	 * 
	 * try {
	 * 
	 * // Cria um Socket e abre uma conexão a um servidor
	 * 
	 * socket = new Socket("127.0.0.1", 7000);
	 * 
	 * // Cria um Leitor para o Socket InputStreamReader is = new
	 * InputStreamReader( socket.getInputStream()); BufferedReader in = new
	 * BufferedReader(is);
	 * 
	 * // Cria um Gravador para o Socket stringEnvio = new
	 * PrintWriter(socket.getOutputStream());
	 * 
	 * // Define um Tempo limite para a conexão socket.setSoTimeout(10000);
	 * 
	 * // Mostra a identificação da conexão
	 * System.out.println(socket.toString());
	 * 
	 * // Lê mensagem de boas vindas do Servidor
	 * System.out.println(in.readLine());
	 * 
	 * // Lê os dados do Leitor do Socket while (true) {
	 * 
	 * String txt = ""; txt = in.readLine(); // Grava na console do cliente
	 * System.out.println(txt); // Se o comando for sair finaliza a conex√£o if
	 * (txt.endsWith("SAIR")) break; }
	 * 
	 * } catch (Exception e) { }
	 * 
	 * }
	 */

	// M�TODO QUE LIMPA OS DADOS DAS LABELS

	public void limpaDados() {

		lbmsg.setText(null);
		lbData.setText(null);

	}

	// M�TODO QUE LIMPA OS DADOS DO DISPLAY

	public void limpaDisplay() {
		tfDisplay.setText(null);

	}

	// M�TODO QUE HABILITA TECLADO

	public void habilitaTudo() {

		bt0.setEnabled(true);
		bt1.setEnabled(true);
		bt2.setEnabled(true);
		bt3.setEnabled(true);
		bt4.setEnabled(true);
		bt5.setEnabled(true);
		bt6.setEnabled(true);
		bt7.setEnabled(true);
		bt8.setEnabled(true);
		bt9.setEnabled(true);
		btasterisco.setEnabled(true);
		btCorrige.setEnabled(true);
		btOk.setEnabled(true);
		tfDisplay.setEnabled(true);

	}

	// M�TODO QUE DESABILITA TECLADO

	public void desabilitaTeclado() {

		bt0.setEnabled(false);
		bt1.setEnabled(false);
		bt2.setEnabled(false);
		bt3.setEnabled(false);
		bt4.setEnabled(false);
		bt5.setEnabled(false);
		bt6.setEnabled(false);
		bt7.setEnabled(false);
		bt8.setEnabled(false);
		bt9.setEnabled(false);
		btasterisco.setEnabled(false);
		btCorrige.setEnabled(false);
		btOk.setEnabled(false);
		tfDisplay.setEnabled(false);

	}

	// M�TODO QUE LIBERA A��O DOS BOT�ES

	public void liberaBotoes() {

		btAvulso.setEnabled(true);
		btMensalista.setEnabled(true);
	}

	public void geraCupom(int cupom) {

	}

	
	
	
	public void chamaHttpClient(String stringEnvio) {

		String stringRetorno = null;


		HttpClient client = new HttpClient();
		
		//Abrindo o httpcliente para logar na aplicação WEB
		PostMethod post = new PostMethod("http://localhost:8080/projetoVagaCerta/efetuaLogin");

		// Enviando parametro via POST para logar na web application
		NameValuePair[] data = { new NameValuePair("login", "rtorrezan"),new NameValuePair("password", "123456") };

		//Abrindo o httpcliente para verificar a string enviada pela cancela
		PostMethod post2 = new PostMethod("http://localhost:8080/projetoVagaCerta/pegaDadosCancela");
		
		// Enviando parametro via POST para verificar a string
		NameValuePair[] data2 = { new NameValuePair("stringEnvio", stringEnvio), };

		try {

			post.setRequestBody(data);
			client.executeMethod(post);

			post2.setRequestBody(data2);
			client.executeMethod(post2);

			InputStream is = post2.getResponseBodyAsStream();
			BufferedReader rd = new BufferedReader(new InputStreamReader(is));

			stringRetorno = rd.readLine();
			System.out.println(stringRetorno);
			trataRetornoAplicacaoWEB(stringRetorno);
			
			

		} catch (HttpException exception) {
		} catch (IOException exception) {
		}

	}

	private void trataRetornoAplicacaoWEB(String stringRetorno) {
		// TODO Auto-generated method stub
		
	}

}
